// task是一个任务执行函数
// 任务必须是一个函数
function arrange(task) {
    const taskList = [];

    taskList.push(task);

    function add(task) {
        taskList.push(task);
        return this;
    }

    function wait(timing) {
        taskList.push(() => {
            return new Promise((resolve) => {
                setTimeout(resolve, timing * 1000)
            })
        });
        return this;
    }
    // 最简单的方式是使用for of，它可以同步的执行异步任务
    async function execute() {
        for(const task of taskList) {
            await task();
        }
    }

    // 通用方式, 同步执行异步任务
    function execute2() {
        const run = async (i) => {
            if(i < taskList.length) {
                await taskList[i]();
                run(i + 1)
            }
        }
        run(0)
    }

    return {
        execute,
        add,
        wait
    }
}

// arrange(() => {
//     console.log('1')
// })
// .add(() => {
//     console.log('2')
// })
// .wait(1)
// .add(() => {
//     console.log('3')
// }).execute()